/**
 * @(#)CartServiceImpl.java 2011
 *
 * Copyright 2011 classic-commerce
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package ca.ioniq.server.service.impl;

import java.util.List;

import javax.inject.Inject;

import ca.ioniq.server.dao.CartDAO;
import ca.ioniq.server.dao.ItemDAO;
import ca.ioniq.server.service.CartService;
import ca.ioniq.server.service.exception.CartException;
import ca.ioniq.shared.entity.Cart;
import ca.ioniq.shared.entity.Item;

import com.google.inject.persist.Transactional;

public class CartServiceImpl implements CartService {

	private final CartDAO cartDao;
	private final ItemDAO itemDao;

    @Inject
	public CartServiceImpl(CartDAO cartDao, ItemDAO itemDao) {
		this.cartDao = cartDao;
		this.itemDao = itemDao;
	}

	@Transactional
	public void updateCart(Long cartId, List<Item> items) throws CartException {
		Cart cart = cartDao.findById(cartId);
		for (Item item : items) {
			cart.getItems().add(item);
			itemDao.merge(item);
		}

		cartDao.merge(cart);
	}
	
	@Transactional
	public Cart viewCart(long cartId) {
		 return cartDao.findById(cartId);
	}

	@Transactional
	public Cart createCart(Cart cart) {
		 cartDao.persist(cart);
		 return cart;
	}

}
